]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
extensions-tool: Split out get_extension_property() helper
authorFlorian Müllner <fmuellner@gnome.org>
Sat, 14 Mar 2020 10:38:24 +0000 (11:38 +0100)
committerFlorian Müllner <fmuellner@gnome.org>
Sun, 5 Apr 2020 11:42:50 +0000 (13:42 +0200)
For the prefs command, we first fetch the extension info to check
whether the extension exists and actually has preferences. This
pattern can be useful for other commands and properties, so split
out a generic helper function.

https://gitlab.gnome.org/GNOME/gnome-shell/issues/2391

subprojects/extensions-tool/src/command-prefs.c
subprojects/extensions-tool/src/common.h
subprojects/extensions-tool/src/main.c

index 25d1626c4d2b8cb127813a38acda398f4b2f1067..50e4b80ba2bec6604bbc8bb6100a79a5207d6b37 100644 (file)
@@ -29,9 +29,7 @@ static gboolean
 launch_extension_prefs (const char *uuid)
 {
   g_autoptr (GDBusProxy) proxy = NULL;
-  g_autoptr (GVariant) response = NULL;
-  g_autoptr (GVariant) asv = NULL;
-  g_autoptr (GVariantDict) info = NULL;
+  g_autoptr (GVariant) info = NULL;
   g_autoptr (GError) error = NULL;
   gboolean has_prefs;
 
@@ -39,29 +37,11 @@ launch_extension_prefs (const char *uuid)
   if (proxy == NULL)
     return FALSE;
 
-  response = g_dbus_proxy_call_sync (proxy,
-                                     "GetExtensionInfo",
-                                     g_variant_new ("(s)", uuid),
-                                     0,
-                                     -1,
-                                     NULL,
-                                     &error);
-  if (response == NULL)
-    {
-      g_printerr (_("Failed to connect to GNOME Shell"));
-      return FALSE;
-    }
-
-  asv = g_variant_get_child_value (response, 0);
-  info = g_variant_dict_new (asv);
-
-  if (!g_variant_dict_contains (info, "uuid"))
-    {
-      g_printerr (_("Extension “%s” doesn't exist\n"), uuid);
-      return FALSE;
-    }
+  info = get_extension_property (proxy, uuid, "hasPrefs");
+  if (info == NULL)
+    return FALSE;
 
-  g_variant_dict_lookup (info, "hasPrefs", "b", &has_prefs);
+  has_prefs = g_variant_get_boolean (info);
   if (!has_prefs)
     {
       g_printerr (_("Extension “%s” doesn't have preferences\n"), uuid);
index fb23b658043f7fc3faccca1de82ec2da5358150e..2b0448495d3891fcce560b6208e93745ca8fa03e 100644 (file)
@@ -54,6 +54,10 @@ void print_extension_info (GVariantDict  *info,
                            DisplayFormat  format);
 
 GDBusProxy *get_shell_proxy (GError **error);
+GVariant   *get_extension_property (GDBusProxy *proxy,
+                                    const char *uuid,
+                                    const char *property);
+
 GSettings  *get_shell_settings (void);
 
 gboolean settings_list_add (GSettings  *settings,
index cc7cd80cd6ac18c6b8389b52326f71f832b2efec..c33058dc676b238d13eb68939ca9c03e56130f48 100644 (file)
@@ -124,6 +124,41 @@ get_shell_settings (void)
   return g_settings_new_full (schema, NULL, NULL);
 }
 
+GVariant *
+get_extension_property (GDBusProxy *proxy,
+                        const char *uuid,
+                        const char *property)
+{
+  g_autoptr (GVariant) response = NULL;
+  g_autoptr (GVariant) asv = NULL;
+  g_autoptr (GVariantDict) info = NULL;
+  g_autoptr (GError) error = NULL;
+
+  response = g_dbus_proxy_call_sync (proxy,
+                                     "GetExtensionInfo",
+                                     g_variant_new ("(s)", uuid),
+                                     0,
+                                     -1,
+                                     NULL,
+                                     &error);
+  if (response == NULL)
+    {
+      g_printerr (_("Failed to connect to GNOME Shell"));
+      return NULL;
+    }
+
+  asv = g_variant_get_child_value (response, 0);
+  info = g_variant_dict_new (asv);
+
+  if (!g_variant_dict_contains (info, "uuid"))
+    {
+      g_printerr (_("Extension “%s” doesn't exist\n"), uuid);
+      return NULL;
+    }
+
+  return g_variant_dict_lookup_value (info, property, NULL);
+}
+
 gboolean
 settings_list_add (GSettings  *settings,
                    const char *key,